SET QUOTED_IDENTIFIER OFF
GO
SET ANSI_NULLS OFF
GO




CREATE Proc [dbo].[SP_TXMVTO_CNTB_I20]  
/*-------------------------------------------------------------------*/  
/*----- Empresa           : OFISIS S.A.                          ----*/  
/*----- Cliente           : OFISIS S.A.                          ----*/  
/*----- Sistema           : Contabilidad                         ----*/  
/*----- Modulo            : Empresa                              ----*/  
/*----- Programa          : Generaci?n Autom?tica de Vouchers    ----*/  
/*-----                     (Facturaci?n)                        ----*/  
/*----- Nombre            : SP_TXMVTO_CNTB_I20                   ----*/  
/*----- Script            : TXMVTO_CNTB                          ----*/  
/*----- Desarrollado por  : Mariano Ch?vez Valdez                ----*/  
/*----- Fecha             : 05/01/1999                           ----*/  
/*----- Base de Datos     : MS SQL Server                        ----*/  
/*----- Version BD        : 7.0                                  ----*/  
/*-------------------------------------------------------------------*/  
/*-------------------------------------------------------------------*/  
/*----- Modificado 1 por : percy garcia                          ----*/  
/*----- Fecha Modifica   : 05/06/2004                            ----*/  
/*----- Detalle Modifica : usuario creacion y modif              ----*/  
/*-------------------------------------------------------------------*/  
/*-------------------------------------------------------------------*/  
/*----- Drop proc SP_TXMVTO_CNTB_I20                             ----*/  
/*----- Grant all on SP_TXMVTO_CNTB_I20 to PUBLIC                ----*/  
/*-----   
SP_TXMVTO_CNTB_I20  '01',1,'SOL','DOL', '001', '003', 2003,3,'FAC','2312-0000021414','P','10008045203'      
----*/  
/*--------------------------------------------------------------------*/  
  
@ISCO_EMPR  TD_VC_002,  
@INNU_CNTB_EMPR  TD_IN_001_CONT,  
@ISCO_MONE_CNTB    TD_VC_003,   
@ISCO_MONE_OTRS    TD_VC_003,   
@ISCO_UNID_CNTB    TD_VC_003,  
@ISCO_OPRC_CNTB    TD_VC_003,   
@INNU_ANNO  TD_IN_004_ANNO,  
@INNU_MESE  TD_IN_002_MESE,  
  
@ISTI_DOCU  TD_VC_003,  
@ISNU_DOCU  TD_VC_020,  
@ISTI_AUXI_EMPR    TD_VC_002,  
@ISCO_AUXI_EMPR    TD_VC_020  
  
As  
Begin Transaction SP_TXMVTO_CNTB_I20  
Declare   
@CSTI_CAMB           TD_VC_003,  
@CSDE_GLOS      TD_VC_100,  
@CSCO_CNTA_EMPR      TD_VC_020_CNTA,  
@VSCO_CNTA_AUXI      TD_VC_020_CNTA,  
@CSCO_MONE           TD_VC_003,  
@VSCO_MONE_AUXI      TD_VC_003,  
@VNNU_ULTI_ASTO      TD_IN_001,  
@VNNU_SECU           TD_IN_002,  
@VSNU_ASTO           TD_VC_010,   
@CNFA_CAMB_DIAR      TD_NU_009_004,  
@CNFA_CAMB_AUX       TD_NU_009_004,  
@CNFA_CAMB           TD_NU_009_004,  
@CNIM_MVTO_CNTB      TD_NU_016_004,  
@CSNO_SERV_FACT      TD_VC_050,  
@CSTI_DOCU      TD_VC_003,  
@VSTI_CAMB_MVTO      TD_VC_003,  
@VNFA_CAMB      TD_NU_009_004,  
@VNFA_CAMB_DIAR      TD_NU_009_004,  
@CSNU_DOCU      TD_VC_020,  
@CDFE_DOCU      TD_DT_001  ,  
@CNIM_SERV_UNIT      NUMERIC(16,4),  
@CNNU_SERV       INT,   
@VNIM_MVTO_ORIG     NUMERIC(16,4),  
@VNIM_MVTO_CNTB     NUMERIC(16,4),  
@CSCO_CNTA_ABON     TD_VC_020_CNTA,  
@CSCO_MONE_CNTA     TD_VC_003,  
@CSCO_MONE_DOCU     TD_VC_003,  
@VNFA_CAMB_REGI     NUMERIC(16,4),  
@CSID_MONE      CHAR(1),  
@CNPO_DIST     NUMERIC(16,4),  
@CSTI_AUXI_EMPR     VARCHAR(1),  
@VSCO_MONE          TD_VC_003 ,   
@CSCO_AUXI_EMPR     TD_VC_020,  
@CSST_CNTA_NATU     TD_VC_001,  
@CSTI_OPER_CNTA     TD_VC_003,  
@VSTI_OPER_CNTA     TD_VC_003,  
@VSTI_OPER_AUXI     TD_VC_003,  
@VNPO_DIST          NUMERIC(16,4),  
@CSCO_SERV_FACT     TD_VC_003,  
@VSTI_AUXI_EMPR     TD_VC_001,  
@VSCO_AUXI_EMPR     TD_VC_020,  
@VNPO_IMPT_VEN1     TD_NU_009_004  
  
  
SELECT @VNNU_ULTI_ASTO = ISNULL(NU_ULTI_ASTO,0) + 1  
FROM TCFECH_PROC  
Where CO_EMPR      = @ISCO_EMPR and  
      NU_CNTB_EMPR = @INNU_CNTB_EMPR and  
      CO_UNID_CNTB = @ISCO_UNID_CNTB AND  
      CO_OPRC_CNTB = @ISCO_OPRC_CNTB AND  
      NU_ANNO      = @INNU_ANNO and  
      NU_MESE      = @INNU_MESE  
  
  
  
IF @VNNU_ULTI_ASTO IS NOT NULL  
BEGIN  
 SELECT @VSNU_ASTO = REPLICATE('0', 10 - datalength(CONVERT(VARCHAR, @VNNU_ULTI_ASTO))) +   
                    CONVERT(VARCHAR, @VNNU_ULTI_ASTO)  
  
  
 Declare CU_TXMVTO_CNTB_I20_1 Cursor For  
 SELECT   
 T4.CO_CNTA_EMPR , T4.TI_OPER ,  
 T1.TI_DOCU ,    T1.NU_DOCU ,  T1.FE_DOCU ,  T2.IM_SERV_UNIT , T2.NU_SERV ,    
 T1.CO_MONE ,    T1.TI_CAMB , T1.FA_CAMB ,  T4.NO_SERV_FACT ,   T6.ST_CNTA_NATU,  
        T6.CO_MONE ,      T6.ST_CNTA_MONE, T4.CO_SERV_FACT  
 FROM TCSERV_FACT T4 , TCFACT T1 , TDFACT T2 , TMPLAN_EMPR T6  
 WHERE   
     T1.CO_EMPR   =   @ISCO_EMPR  
 and T1.TI_AUXI_EMPR  = @ISTI_AUXI_EMPR  
 and T1.CO_AUXI_EMPR  = @ISCO_AUXI_EMPR  
 and T1.TI_DOCU       = @ISTI_DOCU   
 and T1.NU_DOCU       = @ISNU_DOCU   
 and T4.CO_EMPR  =   T1.CO_EMPR   
 and T4.CO_EMPR   = T2.CO_EMPR   
 and T4.CO_MONE   =  T1.CO_MONE   
 and T4.CO_SERV_FACT  =  T2.CO_SERV_FACT   
 and T4.CO_MONE  = T2.CO_MONE   
 and T4.CO_EMPR  =   T6.CO_EMPR   
 and T4.CO_CNTA_EMPR    =       T6.CO_CNTA_EMPR  
 and T1.CO_EMPR  =  T2.CO_EMPR   
 and T1.TI_AUXI_EMPR  = T2.TI_AUXI_EMPR   
 and T1.CO_AUXI_EMPR  = T2.CO_AUXI_EMPR   
 and T1.TI_DOCU  = T2.TI_DOCU   
 and T1.NU_DOCU  = T2.NU_DOCU   
 and T1.CO_MONE  = T2.CO_MONE   
  
 Open CU_TXMVTO_CNTB_I20_1  
 Fetch CU_TXMVTO_CNTB_I20_1 Into   
 @CSCO_CNTA_EMPR, @CSTI_OPER_CNTA,  
 @CSTI_DOCU,  @CSNU_DOCU,  @CDFE_DOCU,   @CNIM_SERV_UNIT, @CNNU_SERV ,   
 @CSCO_MONE_DOCU,  @CSTI_CAMB , @CNFA_CAMB , @CSNO_SERV_FACT , @CSST_CNTA_NATU ,  
        @CSCO_MONE_CNTA , @CSID_MONE ,@CSCO_SERV_FACT  
  
 SELECT @VNNU_SECU = 0  
  
 While @@Fetch_Status = 0  
 BEGIN -- 1  
  
  SELECT  @VSTI_CAMB_MVTO  =  @CSTI_CAMB   
  
  IF @CSTI_CAMB = 'COM'   
   SELECT @VNFA_CAMB  = ISNULL(FA_CMPR_OFIC,1) ,  
   @VNFA_CAMB_DIAR = ISNULL(FA_CMPR_OFIC,1)   
   FROM TCFACT_CAMB  
   WHERE FE_CAMB = @CDFE_DOCU  
   AND CO_MONE = 'DOL'  
  
  IF @CSTI_CAMB = 'VEN'  
   SELECT @VNFA_CAMB  = ISNULL(FA_VNTA_OFIC,1) ,   
   @VNFA_CAMB_DIAR = ISNULL(FA_VNTA_OFIC,1)   
   FROM TCFACT_CAMB  
   WHERE FE_CAMB = @CDFE_DOCU  
   AND CO_MONE = 'DOL'  
  
  if @CSTI_CAMB = 'PAC'  
   SELECT @VNFA_CAMB  = ISNULL(@CNFA_CAMB ,1)    
    
  
  IF @CSST_CNTA_NATU = 'ABO'  
   BEGIN   
    SELECT @VNFA_CAMB_DIAR = ISNULL(FA_CMPR_OFIC,1)   
    FROM TCFACT_CAMB  
    WHERE FE_CAMB = @CDFE_DOCU  
    AND CO_MONE = 'DOL'  
   END   
  IF @CSST_CNTA_NATU = 'CAR'  
   BEGIN   
    SELECT @VNFA_CAMB_DIAR = ISNULL(FA_VNTA_OFIC,1)   
    FROM TCFACT_CAMB  
    WHERE FE_CAMB = @CDFE_DOCU  
    AND CO_MONE = 'DOL'  
   END    
  
  IF @VNFA_CAMB_DIAR IS NULL SELECT @VNFA_CAMB_DIAR = 1  
  
  SELECT @VNIM_MVTO_ORIG =  @CNIM_SERV_UNIT * @CNNU_SERV    
  
  IF  @CSCO_MONE_DOCU =  @ISCO_MONE_CNTB   
    BEGIN  
     SELECT @VNIM_MVTO_ORIG = @CNIM_SERV_UNIT * @CNNU_SERV    
    END   
  ELSE  
    BEGIN  
     SELECT @VNIM_MVTO_ORIG = @CNIM_SERV_UNIT * @CNNU_SERV   
    END   
  
  -- NO SE DEBE CAMBIAR DE MONEDA   
  IF @CSCO_MONE_CNTA =  @CSCO_MONE_DOCU    
   BEGIN   
    -- @VSCO_MONE  ES LO QUE SE VA A INSERTAR    
    SELECT @VSCO_MONE = @CSCO_MONE_DOCU   
    IF @CSCO_MONE_DOCU = @ISCO_MONE_CNTB  
      BEGIN  
        SELECT @VNIM_MVTO_CNTB = @VNIM_MVTO_ORIG   
 SELECT @VSTI_CAMB_MVTO = 'PAC'     -- COMO NO SE CAMBIA LA MONEDA ENTONCES ES PACTADO  
 SELECT @VNFA_CAMB_REGI = 1   
      END   
    ELSE   
      BEGIN  
 SELECT @VSTI_CAMB_MVTO =  @CSTI_CAMB  
 SELECT @VNFA_CAMB_REGI =  @VNFA_CAMB  
        SELECT @VNIM_MVTO_CNTB =  @VNIM_MVTO_ORIG  * @VNFA_CAMB   
      END  
   END   
  ELSE -- MONEDAS DIFERENTES DE CNTA Y DOCUMENTO ENTONCES DEBO CAMBIAR DE MONEDA  
   IF @CSID_MONE = 'S'  -- SE PUEDE USAR OTRA MONEDA ENONCES GRABO  
    BEGIN   
      IF @CSCO_MONE_DOCU = @ISCO_MONE_CNTB -- SI ES IGUAL A LA MONEDA CONTABLE   
        BEGIN   
  SELECT @VSTI_CAMB_MVTO = 'PAC'   -- COMO NO SE CAMBIA LA MONEDA ENTONCES ES PACTADO  
  SELECT @VNFA_CAMB_REGI = 1   
         SELECT @VNIM_MVTO_CNTB = @VNIM_MVTO_ORIG   
         SELECT @VSCO_MONE = @CSCO_MONE_DOCU  
        END  
       ELSE  
        BEGIN   
         SELECT @VSTI_CAMB_MVTO = @CSTI_CAMB  
  SELECT @VNFA_CAMB_REGI = @VNFA_CAMB  
         SELECT @VNIM_MVTO_CNTB = @VNIM_MVTO_ORIG * @VNFA_CAMB  
         SELECT @VSCO_MONE = @CSCO_MONE_DOCU  
       END  
   END   
  ELSE  -- NO SE PUEDE USAR OTRA MONEDA  
     IF @CSCO_MONE_CNTA = @ISCO_MONE_CNTB -- SI LA MONEDA DE LA CUENTA ES IGUAL A LA DE LA CONTABILIDAD  
 BEGIN   
    SELECT @VSTI_CAMB_MVTO = 'PAC'   -- COMO NO SE CAMBIA LA MONEDA ENTONCES ES PACTADO  
    SELECT @VNFA_CAMB_REGI = 1   
    SELECT @VNIM_MVTO_ORIG  = @VNIM_MVTO_ORIG  * @VNFA_CAMB_REGI    
    SELECT @VNIM_MVTO_CNTB = @VNIM_MVTO_ORIG    
    --SELECT @VNIM_MVTO_CNTB , @VNIM_MVTO_ORIG   , @CNFA_CAMB    
    SELECT @VSCO_MONE = @CSCO_MONE_CNTA  
      END  
     ELSE  
 BEGIN   
    SELECT @VSTI_CAMB_MVTO = @CSTI_CAMB  
  SELECT @VNFA_CAMB_REGI = @VNFA_CAMB  
  SELECT @VNIM_MVTO_CNTB = @VNIM_MVTO_ORIG / @VNFA_CAMB       
  SELECT @VSCO_MONE = @CSCO_MONE_DOCU  
      END  
  --------------------------------------------------------------  
  
   SELECT @VNNU_SECU = @VNNU_SECU + 1  
    
     
   Insert Into TXMVTO_CNTB  
  (CO_EMPR,     NU_CNTB_EMPR,  CO_UNID_CNTB,  CO_OPRC_CNTB,   
   NU_ANNO,   NU_MESE,  NU_ASTO, NU_SECU,   
   FE_ASTO_CNTB,  CO_CNTA_EMPR,  TI_AUXI_EMPR,  CO_AUXI_EMPR,   
   TI_DOCU,   NU_DOCU,  FE_DOCU,  FE_DOCU_VENC,   
   TI_CAMB,   CO_MONE,  FA_CAMB,  FA_CAMB_DIAR,  
   TI_OPER,   IM_MVTO_ORIG,  IM_MVTO_CNTB,  DE_GLOS,   
   TI_DOCU_REFE,  NU_DOCU_REFE, FE_DOCU_REFE,  NO_GIRA,   
   FE_ENTR_CHEQ,  FE_PROG_CHEQ,  CO_ORDE_SERV,  SI_MVTO_CNTB,   
   CO_UNID_ORIG ,  CO_OPRC_ORIG,  NU_ASTO_ORIG,  
   ST_OTRS,   NU_PROC,  NU_PROC_SECU,  FE_USUA_MODI,   
   CO_USUA_MODI)  
  VALUES   
  (@ISCO_EMPR,  @INNU_CNTB_EMPR,  @ISCO_UNID_CNTB,  @ISCO_OPRC_CNTB,   
   @INNU_ANNO,   @INNU_MESE,   @VSNU_ASTO,   @VNNU_SECU,   
   @CDFE_DOCU,  @CSCO_CNTA_EMPR,  @ISTI_AUXI_EMPR, @ISCO_AUXI_EMPR,   
   @ISTI_DOCU,  @ISNU_DOCU,   @CDFE_DOCU,   NULL,   
   @CSTI_CAMB,  @VSCO_MONE ,   @VNFA_CAMB_REGI, @VNFA_CAMB_DIAR,   
   @CSTI_OPER_CNTA,@VNIM_MVTO_ORIG,  @VNIM_MVTO_CNTB , @CSNO_SERV_FACT,   
   NULL,  NULL,    NULL,    NULL,    
   NULL,  NULL,          NULL,    'APR',   
   NULL,    NULL,    NULL,   
   NULL,  NULL,    NULL,    GETDATE(),   
   system_user)  
    SELECT @@ERROR   
    If @@ERROR <> 0     /*si falla el Insert*/  
     Begin   
  raisERROR 2002 'ERROR EN LA GENERACION '  
  Close CU_TXMVTO_CNTB_I20_1  
  Deallocate CU_TXMVTO_CNTB_I20_1  
         Rollback Transaction SP_TXMVTO_CNTB_I20  
         --Return 0  
         Return   
  
     End    
  
   /*----------------*/  
--Se inserta el impuesto  
  
  Select  @VNPO_IMPT_VEN1 = PO_IMPT_VEN1   From TTPORC_IMPT  
 Where  NU_ANNO = @INNU_ANNO  
 And NU_MESE = @INNU_MESE  
  
 Select @VNNU_SECU = @VNNU_SECU + 1  
  
     
  
   Select  @VNPO_DIST = Isnull(SUM(Isnull(PO_ABON, 0)), 0)  
   From   TDSERV_FACT T5   
   Where   
          T5.CO_EMPR    = @ISCO_EMPR  
    and   T5.CO_SERV_FACT = @CSCO_SERV_FACT   
    and   T5.CO_MONE    = @CSCO_MONE_DOCU  
  
   Select @VNPO_DIST  = @VNPO_DIST + @VNPO_IMPT_VEN1  
  
    
  
  If @CSTI_OPER_CNTA = 'CAR'  
    Select @VSTI_OPER_AUXI = 'ABO'  
   If @CSTI_OPER_CNTA = 'ABO'  
    Select @VSTI_OPER_AUXI = 'CAR'  
  
  Select @VSCO_CNTA_AUXI = CO_CNTA_EMPR From TTIDEN_CNTA  
  Where CO_EMPR = @ISCO_EMPR  
  And NU_CNTB_EMPR = @INNU_CNTB_EMPR  
  And ID_CNTA = '009'  
  
  
   Select  @VSCO_MONE_AUXI = CO_MONE From TMPLAN_EMPR  
   Where CO_EMPR = @ISCO_EMPR  
   AND NU_ANNO =9999  
   AND CO_CNTA_EMPR = @VSCO_CNTA_AUXI  
  
   Select @VNIM_MVTO_ORIG = @VNIM_MVTO_ORIG * @VNPO_IMPT_VEN1 / @VNPO_DIST   
   Select @VNIM_MVTO_CNTB = @VNIM_MVTO_CNTB * @VNPO_IMPT_VEN1 / @VNPO_DIST   
  
     
  
  If @VSTI_OPER_AUXI = 'ABO'  
   Begin  
     Select @CNFA_CAMB_AUX = ISNULL(FA_CMPR_OFIC,1)   
    FROM TCFACT_CAMB  
    WHERE FE_CAMB = @CDFE_DOCU  
    AND CO_MONE = 'DOL'  
    Select @CSTI_CAMB = 'COM'  
      
      
      
   End  
  
  If @VSTI_OPER_AUXI = 'CAR'  
   Begin  
   Select  @CNFA_CAMB_AUX = ISNULL(FA_VNTA_OFIC,1)   
    FROM TCFACT_CAMB  
    WHERE FE_CAMB = @CDFE_DOCU  
    AND CO_MONE = 'DOL'  
   Select @CSTI_CAMB = 'VEN'  
   End  
  
    If @CNFA_CAMB_AUX = null  set @CNFA_CAMB_AUX =1   
  
   
  If @VSCO_MONE_AUXI <> @CSCO_MONE_CNTA  
    Begin  
      If @CNFA_CAMB_AUX =1  
        Select @VNIM_MVTO_ORIG = @VNIM_MVTO_CNTB  
      Else  
        Select @VNIM_MVTO_ORIG = @VNIM_MVTO_ORIG * @CNFA_CAMB_AUX  
  
        Select @VNFA_CAMB_REGI =@CNFA_CAMB_AUX  
        Select @VNFA_CAMB_DIAR  =@CNFA_CAMB_AUX  
  
        
          
    End  
  Else  
   Begin  
     Select @VNFA_CAMB_REGI = @VNFA_CAMB_REGI  
     Select @VNFA_CAMB_DIAR  = @VNFA_CAMB_REGI    
   End  
    
   
   
  
  
 Insert Into TXMVTO_CNTB  
  (CO_EMPR,     NU_CNTB_EMPR,  CO_UNID_CNTB,  CO_OPRC_CNTB,   
   NU_ANNO,   NU_MESE,  NU_ASTO, NU_SECU,   
   FE_ASTO_CNTB,  CO_CNTA_EMPR,  TI_AUXI_EMPR,  CO_AUXI_EMPR,   
   TI_DOCU,   NU_DOCU,  FE_DOCU,  FE_DOCU_VENC,   
   TI_CAMB,   CO_MONE,  FA_CAMB,  FA_CAMB_DIAR,  
   TI_OPER,   IM_MVTO_ORIG,  IM_MVTO_CNTB,  DE_GLOS,   
   TI_DOCU_REFE,  NU_DOCU_REFE, FE_DOCU_REFE,  NO_GIRA,   
   FE_ENTR_CHEQ,  FE_PROG_CHEQ,  CO_ORDE_SERV,  SI_MVTO_CNTB,   
   CO_UNID_ORIG ,  CO_OPRC_ORIG,  NU_ASTO_ORIG,  
   ST_OTRS,   NU_PROC,  NU_PROC_SECU,  FE_USUA_MODI,   
   CO_USUA_MODI)  
   VALUES   
 (@ISCO_EMPR,   @INNU_CNTB_EMPR,@ISCO_UNID_CNTB,@ISCO_OPRC_CNTB,   
 @INNU_ANNO,    @INNU_MESE,  @VSNU_ASTO,  @VNNU_SECU,    
 @CDFE_DOCU,   @VSCO_CNTA_AUXI , @ISTI_AUXI_EMPR,@ISCO_AUXI_EMPR,  
 NULL ,    NULL,   @CDFE_DOCU,  @CDFE_DOCU,   
 @CSTI_CAMB,  @VSCO_MONE_AUXI ,  @VNFA_CAMB_REGI,@VNFA_CAMB_DIAR,   
 @VSTI_OPER_AUXI ,       @VNIM_MVTO_ORIG,@VNIM_MVTO_CNTB,@CSNO_SERV_FACT,   
 NULL,    NULL,   NULL,   NULL,   
 NULL,    NULL,         NULL,   'APR',   
 NULL,   NULL,   NULL,    
 NULL,    NULL,   NULL,   GETDATE(),   
 system_user)  
  
/*--------*/  
  
  
 Fetch CU_TXMVTO_CNTB_I20_1 Into   
 @CSCO_CNTA_EMPR, @CSTI_OPER_CNTA,  
 @CSTI_DOCU,  @CSNU_DOCU,  @CDFE_DOCU,   @CNIM_SERV_UNIT, @CNNU_SERV ,   
 @CSCO_MONE_DOCU,  @CSTI_CAMB , @CNFA_CAMB , @CSNO_SERV_FACT , @CSST_CNTA_NATU ,  
        @CSCO_MONE_CNTA , @CSID_MONE , @CSCO_SERV_FACT  
 END   
  
 Close CU_TXMVTO_CNTB_I20_1  
 Deallocate CU_TXMVTO_CNTB_I20_1  
  
 -- no pierdo la variable de tipo de cambio @VNFA_CAMB , @VNFA_CAMB_DIAR  
  
/*-------------------------  ABONOS  ------------------------------*/  
  
Declare CU_TXMVTO_CNTB_I20_2 Cursor For  
  
SELECT T5.CO_CNTA_EMPR ,  T6.ST_CNTA_MONE,   T2.IM_SERV_UNIT ,     
       T2.NU_SERV ,    T5.PO_ABON,  
       T6.CO_MONE ,    T1.CO_MONE,   
       T1.FE_DOCU ,       T5.TI_AUXI_EMPR ,  T5.CO_AUXI_EMPR ,   
       T1.TI_CAMB ,    T4.NO_SERV_FACT ,   T1.FA_CAMB ,   
       T6.ST_CNTA_NATU,   T4.TI_OPER ,  T4.CO_SERV_FACT    
From   TDFACT T2 ,  TCFACT T1 , TDSERV_FACT T5 ,  TMPLAN_EMPR T6  , TCSERV_FACT T4  
Where   
      T1.CO_EMPR  = @ISCO_EMPR  
and   T1.TI_AUXI_EMPR  = @ISTI_AUXI_EMPR  
and   T1.CO_AUXI_EMPR  = @ISCO_AUXI_EMPR  
and   T1.TI_DOCU       = @ISTI_DOCU   
and   T1.NU_DOCU       = @ISNU_DOCU   
and   T1.CO_EMPR  = T2.CO_EMPR   
and   T1.TI_AUXI_EMPR  = T2.TI_AUXI_EMPR  
and   T1.CO_AUXI_EMPR  = T2.CO_AUXI_EMPR  
and   T1.TI_DOCU  = T2.TI_DOCU   
and   T1.NU_DOCU  = T2.NU_DOCU   
and   T1.CO_MONE  = T2.CO_MONE   
and   T1.TI_AUXI_EMPR  = T2.TI_AUXI_EMPR   
and   T1.CO_AUXI_EMPR   = T2.CO_AUXI_EMPR   
and   T2.TI_DOCU  = T2.TI_DOCU   
and   T2.NU_DOCU        = T2.NU_DOCU  
and   T5.CO_EMPR  = T2.CO_EMPR   
and   T5.CO_SERV_FACT  = T2.CO_SERV_FACT   
and   T5.CO_MONE  = T2.CO_MONE   
and   T5.CO_EMPR = T6.CO_EMPR  
and   T5.CO_CNTA_EMPR = T6.CO_CNTA_EMPR  
and   T5.CO_EMPR = T4.CO_EMPR  
and   T5.CO_SERV_FACT   = T4.CO_SERV_FACT  
and   T5.CO_MONE        = T4.CO_MONE       
ORDER BY T5.CO_CNTA_EMPR DESC   
  
  
 Open CU_TXMVTO_CNTB_I20_2  
 Fetch CU_TXMVTO_CNTB_I20_2 Into   
 @CSCO_CNTA_ABON , @CSID_MONE ,     @CNIM_SERV_UNIT , @CNNU_SERV , @CNPO_DIST,   
 @CSCO_MONE_CNTA , @CSCO_MONE_DOCU, @CDFE_DOCU ,  
 @CSTI_AUXI_EMPR , @CSCO_AUXI_EMPR, @CSTI_CAMB  ,   @CSNO_SERV_FACT ,   
 @CNFA_CAMB      , @CSST_CNTA_NATU, @CSTI_OPER_CNTA,  @CSCO_SERV_FACT   
 While @@Fetch_Status = 0  BEGIN  
  
SELECT @VNNU_SECU = @VNNU_SECU + 1  
  
  IF @CSTI_CAMB = 'COM'   
   SELECT @VNFA_CAMB  = ISNULL(FA_CMPR_OFIC,1) ,  
   @VNFA_CAMB_DIAR = ISNULL(FA_CMPR_OFIC,1)   
   FROM TCFACT_CAMB  
   WHERE FE_CAMB = @CDFE_DOCU  
   AND CO_MONE = @CSCO_MONE   
  
  IF @CSTI_CAMB = 'VEN'  
   SELECT @VNFA_CAMB  = ISNULL(FA_VNTA_OFIC,1) ,   
   @VNFA_CAMB_DIAR = ISNULL(FA_VNTA_OFIC,1)   
   FROM TCFACT_CAMB  
   WHERE FE_CAMB = @CDFE_DOCU  
   AND CO_MONE = @CSCO_MONE   
  
  if @CSTI_CAMB = 'PAC'  
   SELECT @VNFA_CAMB  = ISNULL(@CNFA_CAMB ,1)    
    
  IF @CSST_CNTA_NATU = 'S'  
  
   SELECT @VNFA_CAMB_DIAR = ISNULL(FA_CMPR_OFIC,1)   
   FROM TCFACT_CAMB  
   WHERE FE_CAMB = @CDFE_DOCU  
   AND CO_MONE = 'DOL'  
  ELSE  
   SELECT @VNFA_CAMB_DIAR = ISNULL(FA_VNTA_OFIC,1)   
   FROM TCFACT_CAMB  
   WHERE FE_CAMB = @CDFE_DOCU  
   AND CO_MONE = 'DOL'  
  
   
  IF  @CSCO_MONE_DOCU =  @ISCO_MONE_CNTB   
    BEGIN  
     SELECT @VNIM_MVTO_ORIG = @CNIM_SERV_UNIT * @CNNU_SERV    
    END   
  ELSE  
    BEGIN  
     SELECT @VNIM_MVTO_ORIG = @CNIM_SERV_UNIT * @CNNU_SERV   
    END   
  
  
  
  IF @CSCO_MONE_CNTA =  @CSCO_MONE_DOCU  -- NO SE DEBE CAMBIAR DE MONEDA   
   BEGIN   
    SELECT @VSCO_MONE = @CSCO_MONE_DOCU -- @VSCO_MONE  ES LO QUE SE VA A INSERTAR    
    IF @CSCO_MONE_DOCU = @ISCO_MONE_CNTB  
      BEGIN  
        SELECT @VNIM_MVTO_CNTB = @VNIM_MVTO_ORIG   
 SELECT @VSTI_CAMB_MVTO = 'PAC'     -- COMO NO SE CAMBIA LA MONEDA ENTONCES ES PACTADO  
 SELECT @VNFA_CAMB_REGI = 1   
      END   
    ELSE   
      BEGIN  
 SELECT @VSTI_CAMB_MVTO =  @CSTI_CAMB  
 SELECT @VNFA_CAMB_REGI =  @VNFA_CAMB  
        SELECT @VNIM_MVTO_CNTB =  @VNIM_MVTO_ORIG  * @VNFA_CAMB   
      END  
   END   
  ELSE  
   IF @CSID_MONE = 'S'  -- SE PUEDE USAR OTRA MONEDA  
    BEGIN   
      IF @CSCO_MONE_DOCU = @ISCO_MONE_CNTB  
        BEGIN   
  SELECT @VSTI_CAMB_MVTO = 'PAC'   -- COMO NO SE CAMBIA LA MONEDA ENTONCES ES PACTADO  
  SELECT @VNFA_CAMB_REGI = 1   
         SELECT @VNIM_MVTO_CNTB = @VNIM_MVTO_ORIG   
         SELECT @VSCO_MONE = @CSCO_MONE_DOCU  
        END  
       ELSE  
        BEGIN   
         SELECT @VSTI_CAMB_MVTO = @CSTI_CAMB  
  SELECT @VNFA_CAMB_REGI = @VNFA_CAMB  
         SELECT @VNIM_MVTO_CNTB = @VNIM_MVTO_ORIG * @VNFA_CAMB  
         SELECT @VSCO_MONE = @CSCO_MONE_DOCU  
       END  
   END   
  ELSE  -- NO SE PUEDE USAR OTRA MONEDA  
     IF @CSCO_MONE_CNTA = @ISCO_MONE_CNTB  
 BEGIN   
    SELECT @VSTI_CAMB_MVTO = 'PAC'   -- COMO NO SE CAMBIA LA MONEDA ENTONCES ES PACTADO  
    SELECT @VNFA_CAMB_REGI = 1   
    SELECT @VNIM_MVTO_ORIG = @VNIM_MVTO_ORIG * @CNFA_CAMB    
    SELECT @VNIM_MVTO_CNTB = @VNIM_MVTO_ORIG   
    SELECT @VSCO_MONE = @CSCO_MONE_CNTA  
      END  
     ELSE  
 BEGIN   
         SELECT @VSTI_CAMB_MVTO = @CSTI_CAMB  
  SELECT @VNFA_CAMB_REGI = @VNFA_CAMB  
  SELECT @VNIM_MVTO_CNTB = @VNIM_MVTO_ORIG / @VNFA_CAMB       
  SELECT @VSCO_MONE = @CSCO_MONE_DOCU  
        END  
  
   SELECT @VNPO_DIST = Isnull(SUM(Isnull(PO_ABON, 0)), 0)  
   From   TDSERV_FACT T5   
   Where   
          T5.CO_EMPR    = @ISCO_EMPR  
    and   T5.CO_SERV_FACT = @CSCO_SERV_FACT   
    and   T5.CO_MONE    = @CSCO_MONE_DOCU  
    
   Select  @VNPO_IMPT_VEN1 = PO_IMPT_VEN1   FROM TTPORC_IMPT  
   WHERE NU_ANNO = @INNU_ANNO  
   AND NU_MESE = @INNU_MESE  
  
   Select @VNPO_DIST = @VNPO_DIST + @VNPO_IMPT_VEN1  
  
  
   SELECT @VNIM_MVTO_ORIG = @VNIM_MVTO_ORIG * @CNPO_DIST / @VNPO_DIST   
   SELECT @VNIM_MVTO_CNTB = @VNIM_MVTO_ORIG * @VNFA_CAMB_REGI  
  
   IF @CSTI_OPER_CNTA = 'CAR' -- SI SU CUENTA ORIGEN ES CARGO ENTONCES EL DESTINO ES ABONO  
      SELECT  @VSTI_OPER_CNTA = 'ABO'  
   IF @CSTI_OPER_CNTA = 'ABO' -- SI SU CUENTA ORIGEN ES CARGO ENTONCES EL DESTINO ES ABONO  
      SELECT  @VSTI_OPER_CNTA = 'CAR'  
  
   SELECT @VSTI_AUXI_EMPR = NULL  
   SELECT @VSCO_AUXI_EMPR = NULL  
  
  
   IF DATALENGTH(LTRIM(RTRIM(@CSTI_AUXI_EMPR))) = 0   
 SELECT @VSTI_AUXI_EMPR = NULL  
   ELSE  
 SELECT @VSTI_AUXI_EMPR = @CSTI_AUXI_EMPR  
  
   IF DATALENGTH(LTRIM(RTRIM(@CSCO_AUXI_EMPR))) = 0   
 SELECT @VSCO_AUXI_EMPR = NULL  
   ELSE  
 SELECT @VSCO_AUXI_EMPR = @CSCO_AUXI_EMPR  
  
    
      
     
   Insert Into TXMVTO_CNTB  
  (CO_EMPR,     NU_CNTB_EMPR,  CO_UNID_CNTB,  CO_OPRC_CNTB,   
   NU_ANNO,   NU_MESE,  NU_ASTO, NU_SECU,   
   FE_ASTO_CNTB,  CO_CNTA_EMPR,  TI_AUXI_EMPR,  CO_AUXI_EMPR,   
   TI_DOCU,   NU_DOCU,  FE_DOCU,  FE_DOCU_VENC,   
   TI_CAMB,   CO_MONE,  FA_CAMB,  FA_CAMB_DIAR,  
   TI_OPER,   IM_MVTO_ORIG,  IM_MVTO_CNTB,  DE_GLOS,   
   TI_DOCU_REFE,  NU_DOCU_REFE, FE_DOCU_REFE,  NO_GIRA,   
   FE_ENTR_CHEQ,  FE_PROG_CHEQ,  CO_ORDE_SERV,  SI_MVTO_CNTB,   
   CO_UNID_ORIG ,  CO_OPRC_ORIG,  NU_ASTO_ORIG,  
   ST_OTRS,   NU_PROC,  NU_PROC_SECU,  FE_USUA_MODI,   
   CO_USUA_MODI)  
   VALUES   
 (@ISCO_EMPR,   @INNU_CNTB_EMPR,@ISCO_UNID_CNTB,@ISCO_OPRC_CNTB,   
 @INNU_ANNO,    @INNU_MESE,  @VSNU_ASTO,  @VNNU_SECU,    
 @CDFE_DOCU,   @CSCO_CNTA_ABON,@VSTI_AUXI_EMPR,@VSCO_AUXI_EMPR,  
 NULL ,    NULL,   @CDFE_DOCU,  @CDFE_DOCU,   
 @VSTI_CAMB_MVTO,  @VSCO_MONE ,  @VNFA_CAMB_REGI,@VNFA_CAMB_DIAR,   
 @VSTI_OPER_CNTA ,       @VNIM_MVTO_ORIG,@VNIM_MVTO_CNTB,@CSNO_SERV_FACT,   
 NULL,    NULL,   NULL,   NULL,   
 NULL,    NULL,         NULL,   'APR',   
 NULL,   NULL,   NULL,    
 NULL,    NULL,   NULL,   GETDATE(),   
 system_user)  
    SELECT @@ERROR   
    If @@ERROR <> 0     /*si falla el Insert*/  
     Begin   
  raisERROR 2002 'ERROR EN LA GENERACION '  
  Close CU_TXMVTO_CNTB_I20_2  
  Deallocate CU_TXMVTO_CNTB_I20_2  
         Rollback Transaction SP_TXMVTO_CNTB_I20  
         --Return 0  
         Return   
     End    
  
  Fetch CU_TXMVTO_CNTB_I20_2 Into   
 @CSCO_CNTA_ABON , @CSID_MONE ,     @CNIM_SERV_UNIT , @CNNU_SERV , @CNPO_DIST,   
 @CSCO_MONE_CNTA , @CSCO_MONE_DOCU, @CDFE_DOCU ,  
 @CSTI_AUXI_EMPR , @CSCO_AUXI_EMPR, @CSTI_CAMB  ,   @CSNO_SERV_FACT ,   
 @CNFA_CAMB      , @CSST_CNTA_NATU, @CSTI_OPER_CNTA , @CSCO_SERV_FACT   
 End  
 Close CU_TXMVTO_CNTB_I20_2  
 Deallocate CU_TXMVTO_CNTB_I20_2  
  
  
  
/*---------------  ACTUALIZACION DE LA TABLA DE PROCESOS  -------------------*/  
   
 UPDATE TCFECH_PROC  
 SET NU_ULTI_ASTO = NU_ULTI_ASTO + 1  
 FROM TCFECH_PROC  
 Where CO_EMPR      = @ISCO_EMPR and  
       NU_CNTB_EMPR = @INNU_CNTB_EMPR and  
       CO_UNID_CNTB = @ISCO_UNID_CNTB AND  
       CO_OPRC_CNTB = @ISCO_OPRC_CNTB AND  
       NU_ANNO      = @INNU_ANNO and  
       NU_MESE      = @INNU_MESE  
  
COMMIT TRAN SP_TXMVTO_CNTB_I20  
End  
RETURN  
  
  
/*---------------------------- FIN ------------------------------------*/  







GO
